﻿/**
 * 表单。
 */
Ext.define('Happy.form.Panel', {
    extend: 'Ext.form.Panel',
    alias: 'widget.happy-form',
    mixins: { 'sceneable': 'Happy.mixin.Sceneable' },
    requires: [
        'Happy.form.action.Close',
        'Happy.form.action.Save',
        'Happy.form.field.CkEditor',
        'Happy.form.field.Combobox',
        'Happy.form.field.TreeCombobox'
    ],

    /**
     * @cfg 重写 ExtJs。
     */
    padding: 10,
    /**
     * @cfg 重写 ExtJs。
     */
    layout: 'anchor',
    /**
     * @cfg 重写 ExtJs。
     */
    defaults: {
        anchor: '100%'
    },
    /**
     * @cfg 重写 ExtJs。
     */
    defaultType: 'textfield',
    /**
     * @cfg 重写 ExtJs。
     */
    fieldDefaults: {
        labelAlign: 'right',
        labelWidth: 150
    },

    constructor: function (config) {
        var me = this;

        if (config && config.scene) {
            me.initScene(config.scene);
            delete config.scene;
        }

        me.callParent(arguments);
    },

    /**
     * 重写 ExtJs。
     * 
     * @protected
     */
    initComponent: function () {
        var me = this;

        me.configComponent();

        me.callParent(arguments);

        me.configRelatedItems();
    },

    /**
     * 配置组件。
     * 
     * @protected
     */
    configComponent: function () {
        var me = this;

        me.configItems();
        me.configButtons();
    },

    /**
     * 配置表单 items。
     * 
     * @protected
     */
    configItems: function () {
        var me = this;

        me.items = me.items || [];
    },

    /**
     * 配置按钮。
     * 
     * @protected
     */
    configButtons: function () {
        var me = this;

        me.buttons = me.buttons || [];
    },

    /**
     * 配置和当前表单相关的 items，如：订单的订单项列表。
     *
     * @protected
     * @abstract
     */
    configRelatedItems: Ext.emptyFn,

    /**
     * @event recordloaded
     * 记录加载到表单后触发该事件。
     *
     * @param {Happy.form.Panel}
     * @param {Ext.data.Model}
     */

    /**
     * 重写 ExtJs。
     * 
     * @protected
     */
    loadRecord: function (record) {
        var me = this;

        var basicForm = me.callParent(arguments);

        me.fireEvent('recordloaded', me, record);

        return basicForm;
    }
});